Fix footer documentation access with in-app documents hub#41
Open
krandder wants to merge 1 commit into
Open
Conversation
✅ Deploy Preview for futarchy ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
krandder
added a commit
that referenced
this pull request
May 10, 2026
Catalogue completion: discovered the repo has only 42 PRs total (range #23..#65 with one gap at #38), not the assumed ~65. The 3 missing from the previous count are all currently OPEN: #36 (chart zoom reset), #40 (position tab indicator), #41 (footer docs hub). Catalogued under a new "Open PRs" section. Catalogue is now 42/42 (full coverage). Snapshot field corrected from "40 / ~65" to "42 / 42" + stale "still need to be catalogued" footer note replaced. Test: footer-links.test.mjs (6 cases) — static lint of NAV_LINKS in src/components/common/Footer.jsx. Pins: - Every entry has label + href - external: true ↔ absolute http(s) href - non-external entries are path-relative - Documentation href is in an accepted set covering BOTH the current external URL AND the post-PR-#41 in-app routes — stays green through the transition, surfaces typos / accidental redirects - Status link pinned at canonical https://status.futarchy.fi Tests: 79 → 85 (interface), 146 → 152 cross-repo. All green.
krandder
added a commit
that referenced
this pull request
May 11, 2026
…(/companies row complete 16/16) Adds 41-candles-504-gateway-timeout.scenario.mjs — fills the 2nd cell of the new "gateway timeout 504" matrix row (companion to #40 on registry side). REGISTRY happy + CANDLES 504 + Content-Type: text/html + nginx-style HTML body (no JSON, no Retry-After). Asserts the carousel renders the event card but the price degrades to "0.00 SDAI" — same terminal UX as #3 (502) and #37 (429) but DIFFERENT control flow. Distinct from #3 and #37: - vs #3 (502 + JSON): #3's body parses cleanly, consumer hits .catch on structured envelope. #41's body is HTML — .json() throws SyntaxError BEFORE the consumer's status-check runs. Different bug-class entirely. - vs #37 (429 + Retry-After + JSON): #37 has explicit Retry-After contract clients SHOULD respect. #41 has no Retry-After (504s typically lack one). Consumer that conflates them ignores Retry-After on 429 OR fails to retry on 504 — invisible regression class. Distinct from #40 (same row, registry side): #40 takes the carousel-data-source out (registry empty → "No organizations found"); #41 keeps it healthy but takes the per-card price-fetch out — exercises 2nd-tier data-fetch failure with 504+HTML control flow. Bug-shapes captured: per-pool fetcher crashes on JSON.parse(html) throwing SyntaxError, per-pool fetcher renders raw HTML body in price card, per-pool fetcher treats 504 as success with empty data (silent broken state), per-pool fetcher hammers candles upstream with retries (no Retry-After to respect — worse than #37), card hangs on LoadingSpinner forever (parse error before loading-cleanup), bulk-prefetch vs per-pool fallback race wins/loses unpredictably. MATRIX MILESTONE: /companies completes the new 8th row → 16/16 cells filled across all 8 failure-mode rows × 2 endpoints. /markets/[address] still 14/16 (next two slices will fill the market-page side of the new row). Live re-validation: smoke 80/80 (pin floor bumped from 15 to 16 on /companies), scenario #41 passes in 2.3s on first run, catalog regenerated (41 scenarios).
krandder
added a commit
that referenced
this pull request
May 11, 2026
… 32/32 (FULL PARITY) Adds 43-market-page-candles-504-gateway-timeout.scenario.mjs — the LAST cell of the expanded 8-row chaos matrix. Mirror of #41 applied to the market page's distinct candles-consumer surface (chart panel + per-pool spot prices + trading-panel preview). Distinct from prior chaos slices on the same page: - vs #25 (502+JSON): 502+JSON fires .catch on structured envelope; 504+HTML fires .then then THROWS during .json() parse — completely different control flow path. - vs #39 (429+Retry-After+JSON): 429+JSON has explicit Retry-After contract; 504+HTML has no Retry-After AND throws on parse — consumer can't even read structured error message to log what happened. - vs #42 (registry-504+HTML on same page): #42 takes the proposal-metadata enrichment out (chart + trading panels unaffected); #43 takes candles-side data sources out (chart + per-pool prices + trading-preview all hit the parse-error path) — entirely different downstream consumer cascade. - vs #41 (candles-504 on /companies): #41's downstream consumer is the carousel price-card formatter → "0.00 SDAI" fallback string. #43's downstream consumers are the chart panel renderer + per-pool spot-price displays + trading- panel preview-price calculator — much larger surface area, distinct UX contracts per panel. REGISTRY happy + CANDLES 504 + Content-Type: text/html + nginx-style HTML body (no JSON, no Retry-After). Page-shell assertions (Trading Pair + wallet shorthand) prove a candles- side gateway-timeout doesn't cascade to a hung/crashed page-shell. Bug-shapes captured: chart panel crashes on JSON.parse(html) throwing SyntaxError, chart panel hangs forever (parse error before loading-cleanup; distinct from #25 .catch path), chart-fetch hammers candles upstream with retries (no backoff, no Retry-After to respect — worse than #39; worse than /companies because chart refetches on hover/zoom/time-window- change), per-pool spot-price renders raw HTML body, trading panel preview crashes from candles-derived feed parse-error (NaN math), whole-page crash from missing chart error boundary (collateral damage). 8-ROW MATRIX MILESTONE: full 8-row × 2-endpoint × 2-page grid now 32/32 cells filled — every interface-side chaos failure- mode in the expanded 8-row catalog is GUARANTEED to be probed on both pages. The matrix grew from 28 to 32 cells over 4 slices (#40 → #41 → #42 → #43); full parity re-attained at the new row count in the same number of slices it took to open the row. Live re-validation: smoke 80/80 (pin floor bumped from 15 to 16 on /markets/[address]), scenario #43 passes in 3.9s on first run, catalog regenerated (43 scenarios), matrix script shows /companies 16/16 + /markets/[address] 16/16 = 32/32.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
/documentsroute instead of the unstable external docs host/docsalias so either path worksWhy
As checked on March 10, 2026,
https://docs.futarchy.firedirects tohttps://github.com/futarchy-fi/docs/blob/main/README.mdrather than a dedicated docs surface. Routing the footer through an in-app page makes the website path reliable even when that external redirect behaves poorly in some browsers or wallet webviews.Validation
npx next lint --file src/components/common/Footer.jsx --file src/pages/documents/index.jsx --file src/pages/docs/index.jsxnpm run builddid not complete in this environment because the existing Next export process exited withSIGBUSafter the standardoutput: exportheader warnings